'use strict';

const moment = require('moment');
const { STRING, INTEGER, BIGINT, DATE, DATEONLY, NOW, NUMERIC, DECIMAL, BOOLEAN, GEOMETRY } = require("sequelize").DataTypes;

let GeofenceModel = {
	name:"GeofenceModel",
	define: {
		id:{ type:BIGINT, primaryKey:true, autoIncrement:true },
		geofenceName: { type: STRING(200), allowNull: false, defaultValue: '' , field:'geofence_name' ,comment:"电子围栏名称" },
		description: { type: STRING(200), allowNull: true, defaultValue: '' ,field:'description' ,comment:"电子围栏描述（备注）" },
		geofenceBoundary: { type: GEOMETRY, allowNull: false, field:'geofence_boundary' ,comment:"电子围栏边界（电子围栏的多边形定义）" },
		geofenceRule: { type: INTEGER, allowNull: true, defaultValue: null ,field:'geofence_rule' ,comment:"电子围栏规则，目前主要支持：1 进入电子围栏；2 离开电子围栏。" },
		createdTime:{
			type:DATE, get() {
				return this.getDataValue('createdTime') ? moment(this.getDataValue('createdTime')).format('YYYY-MM-DD HH:mm:ss') : '';
			},
			allowNull:true, field:'create_time', comment:'数据记录添加时间',defaultValue:NOW,
		},
	},
	options:{
		tableName:'tbl_geofence',
		// 自定义表名
		// 禁止修改表名，默认情况下，sequelize 将自动将所有传递的模型名称（define的第一个参数）转换为复数
		// 但是为了安全着想，复数的转换可能会发生变化，所以禁止该行为
		freezeTableName:true,

		// 是否需要增加createdAt、updatedAt、deletedAt字段
		timestamps:false,

		// raw: true,

		// 不需要createdAt字段
		createdAt:'created_date',

		// 将updatedAt字段改个名
		//updatedAt: 'modifiedOn',
		updatedAt:'updated_date',
		// 将deletedAt字段改名
		// 同时需要设置paranoid为true（此种模式下，删除数据时不会进行物理删除，而是设置deletedAt为当前时间
		//deletedAt: 'deletedOn',
		deletedAt:false,
		// paranoid: true
	}
};

module.exports = GeofenceModel;
